import { IPSModelObject } from '../../ipsmodel-object';
import { IPSDataEntity } from '../ipsdata-entity';
import { IPSDERBase } from '../der/ipsderbase';
import { IPSDEDQGroupCondition } from './ipsdedqgroup-condition';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSDEDQJoin
 */
export interface IPSDEDQJoin extends IPSModelObject {
  /**
   * 别名
   * @type {string}
   */
  alias: string;

  /**
   * 子查询连接集合
   *
   * @type {IPSDEDQJoin[]}
   */
  getChildPSDEDQJoins(): IPSDEDQJoin[] | null;

  /**
   * 子查询连接集合
   *
   * @type {IPSDEDQJoin[]}
   */
  get childPSDEDQJoins(): IPSDEDQJoin[] | null;

  findChildPSDEDQJoin(objKey: any): IPSDEDQJoin | null;

  /**
   * 连接关系所在实体
   *
   * @type {IPSDataEntity}
   */
  getDERPSDataEntity(): IPSDataEntity | null;

  /**
   * 连接关系所在实体
   *
   * @type {IPSDataEntity}
   */
  get dERPSDataEntity(): IPSDataEntity | null;

  /**
   * 连接关系所在实体（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getDERPSDataEntityMust(): IPSDataEntity;

  /**
   * 连接实体关系
   *
   * @type {IPSDERBase}
   */
  getJoinPSDER(): IPSDERBase | null;

  /**
   * 连接实体关系
   *
   * @type {IPSDERBase}
   */
  get joinPSDER(): IPSDERBase | null;

  /**
   * 连接实体关系（必须存在）
   *
   * @type {IPSDERBase}
   */
  getJoinPSDERMust(): IPSDERBase;

  /**
   * 连接实体对象
   *
   * @type {IPSDataEntity}
   */
  getJoinPSDataEntity(): IPSDataEntity | null;

  /**
   * 连接实体对象
   *
   * @type {IPSDataEntity}
   */
  get joinPSDataEntity(): IPSDataEntity | null;

  /**
   * 连接实体对象（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getJoinPSDataEntityMust(): IPSDataEntity;

  /**
   * 连接类型
   * @type {string}
   */
  joinType: string;

  /**
   * 查询条件对象
   *
   * @type {IPSDEDQGroupCondition}
   */
  getPSDEDQGroupCondition(): IPSDEDQGroupCondition | null;

  /**
   * 查询条件对象
   *
   * @type {IPSDEDQGroupCondition}
   */
  get psDEDQGroupCondition(): IPSDEDQGroupCondition | null;

  /**
   * 查询条件对象（必须存在）
   *
   * @type {IPSDEDQGroupCondition}
   */
  getPSDEDQGroupConditionMust(): IPSDEDQGroupCondition;
}
